#ifndef _MANEJADORARCHIVOS_H_
#define _MANEJADORARCHIVOS_H_

/********************************************************************
 * ManejadorArchivos.h
 * 
 * Descripcion : implementa metodos para la escritura y lectura 
 * directa sobre archivos en bajo nivel.
*********************************************************************/

#include <sys/types.h>
#include <unistd.h>
#include <string>
#include <fcntl.h> 
#include <errno.h>
#include "excep_leer_bloque.h"
#include "excep_escribir_bloque.h"
#include "manejadorErrores.h"
#include <sys/types.h>
#include <sys/stat.h>

class ManejadorArchivos{
		private:
			
			static ManejadorArchivos* instance;

			/*
			 * Constructor de copia
			 */ 
			ManejadorArchivos(ManejadorArchivos &m){}
		
			/*
			 * Operador = para prohibir la copia
			 */ 
			ManejadorArchivos& operator=(ManejadorArchivos &m){return m;} 
			
			ManejadorArchivos();
				
		public:
			
			static ManejadorArchivos* get_instance();
			
			~ManejadorArchivos();
			
			void escribir_bloque(int fd, unsigned int num_bloque,char* bloque, unsigned int tam)
																	 throw (ExcepEscribirBloque);
			
			char* leer_bloque(int fd, unsigned int num_bloque, unsigned int tam) throw (ExcepLeerBloque);
			
			int crear_archivo(std::string &nombre);
			
			int abrir_archivo(std::string &nombre);
			
			int cerrar_archivo(int fd); 	
			
			bool truncar_arch(int fd, unsigned int pos_trunc);		
			
			/*
			 * Devuelve el tamano del archivo en bytes. Si hay un problema
			 * devuelve -1.
			 */ 
			long get_tam_archivo(int fd);
		
			static void destroy();
};

#endif
